/**
 * 认证中间件
 * @module middleware/auth
 */

const jwt = require('jsonwebtoken');
const { User } = require('../models');
require('dotenv').config();

/**
 * 验证JWT令牌
 * @param {Object} req - 请求对象
 * @param {Object} res - 响应对象
 * @param {Function} next - 下一个中间件函数
 * @returns {void}
 */
const authenticateToken = async (req, res, next) => {
  try {
    // 从请求头获取token
    const authHeader = req.headers['authorization'];
    const token = authHeader && authHeader.split(' ')[1];
    
    if (!token) {
      return res.status(401).json({ message: '未提供认证令牌' });
    }
    
    // 验证token
    jwt.verify(token, process.env.JWT_SECRET, async (err, decoded) => {
      if (err) {
        return res.status(403).json({ message: '无效的认证令牌' });
      }
      
      // 查找用户
      const user = await User.findByPk(decoded.id);
      if (!user) {
        return res.status(404).json({ message: '用户不存在' });
      }
      
      // 将用户信息添加到请求对象
      req.user = user;
      next();
    });
  } catch (error) {
    console.error('认证错误:', error);
    res.status(500).json({ message: '服务器错误' });
  }
};

/**
 * 检查是否为管理员
 * @param {Object} req - 请求对象
 * @param {Object} res - 响应对象
 * @param {Function} next - 下一个中间件函数
 * @returns {void}
 */
const isAdmin = (req, res, next) => {
  if (req.user && req.user.role === 'admin') {
    next();
  } else {
    res.status(403).json({ message: '需要管理员权限' });
  }
};

module.exports = {
  authenticateToken,
  isAdmin
}; 